package secondStage.part3.泛型;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * @ClassName: [GenericDemo]
 * @Description: Generic泛型
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-03]
 * @Version: [v1.0]
 */
/*4.1泛型概述
        泛型:是JDK5中引入的特性，它提供了编译时类型安全检测机制，该机制允许在编译时检测到非法的类型.
        它的本质是参数化类型，也就是说所操作的数据类型被指定为一个参数
        一提到参数，最熟悉的就是定义方法时有形参，然后调用此方法时传递实参。那么参数化类型怎么理解呢?
        顾名思义，就是将类型由原来的具体的类型参数化，然后在使用/调用时传入具体的类型
        这种参数类型可以用在类、方法和接口中，分别被称为泛型类、泛型方法、泛型接口

        泛型定义格式:
<类型>:指定一种类型的格式。这里的类型可以看成是形参
<类型1,类型2....>∶指定多种类型的格式，多种类型之间用逗号隔开。这里的类型可以看成是形参
        将来具体调用时候给定的类型可以看成是实参，并且实参的类型只能是引用数据类型
        泛型的好处:
        把运行时期的问题提前到了编译期间
        避免了强制类型转换*/
//需求：Collection集合存储字符串并遍历
public class GenericDemo {
    public static void main(String[] args) {
        //创建集合类型
        Collection c = new ArrayList();
        //添加元素
        c.add("hello");
        c.add("world");
        c.add("java");

        //遍历集合
        Iterator it = c.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            System.out.println(obj);
        }
        System.out.println("---使用泛型形式----");
        //创建集合类型
        Collection<String> c1 = new ArrayList();
        //添加元素
        c1.add("hello");
        c1.add("world");
        c1.add("java");
//        c1.add(100);

        //遍历集合
        Iterator<String> it1 = c1.iterator();
        while (it1.hasNext()) {
            String s = it1.next();
            System.out.println(s);
        }
    }
}
